#include"GPIO.h"
#include"define.h"
void GPIO_input_pulldown(void)
{
		GPIO->GPIO_p0 =70;
		GPIO->GPIO_p1 =70;
		GPIO->GPIO_p2 =70;
		GPIO->GPIO_p3 =70;
		GPIO->GPIO_p4 =70;
		GPIO->GPIO_p5 =70;
		GPIO->GPIO_p6 =70;
		GPIO->GPIO_p7 =70;
		GPIO->GPIO_p8 =70;
		GPIO->GPIO_p9 =70;
		GPIO->GPIO_p12=70;
		GPIO->GPIO_p13=70;
		GPIO->GPIO_p14=70;
		GPIO->GPIO_p15=70;
		GPIO->GPIO_p16=70;
		GPIO->GPIO_p17=70;
		GPIO->GPIO_p18=70;
		GPIO->GPIO_p19=70;
		GPIO->GPIO_p20=70;
		GPIO->GPIO_p21=70;
		GPIO->GPIO_p22=70;
		GPIO->GPIO_p23=70;
		GPIO->GPIO_p24=70;
		GPIO->GPIO_p25=70;
		GPIO->GPIO_p26=70;
		GPIO->GPIO_p27=70;
		GPIO->GPIO_p28=70;
		GPIO->GPIO_p29=70;
		GPIO->GPIO_p30=70;
}
/***************************************************************
Set gpio 0-30 to GPIO mode ,and set output enable input disable

default :output and input disable,flaoting state

***************************************************************/
void GPIOmode_Enable(void)
{
		GPIO->GPIO_p0 =0;
		GPIO->GPIO_p1 =0;
		GPIO->GPIO_p2 =0;
		GPIO->GPIO_p3 =0;
		GPIO->GPIO_p4 =0;
		GPIO->GPIO_p5 =0;
		GPIO->GPIO_p6 =0;
		GPIO->GPIO_p7 =0;
		GPIO->GPIO_p8 =0;
		GPIO->GPIO_p9 =0;
		GPIO->GPIO_p10=0;
		GPIO->GPIO_p11=0;
		GPIO->GPIO_p12=0;
		GPIO->GPIO_p13=0;
		GPIO->GPIO_p14=0;
		GPIO->GPIO_p15=0;
		GPIO->GPIO_p16=0;
		GPIO->GPIO_p17=0;
		GPIO->GPIO_p18=0;
		GPIO->GPIO_p19=0;
		GPIO->GPIO_p20=0;
		GPIO->GPIO_p21=0;
		GPIO->GPIO_p22=0;
		GPIO->GPIO_p23=0;
		GPIO->GPIO_p24=0;
		GPIO->GPIO_p25=0;
		GPIO->GPIO_p26=0;
		GPIO->GPIO_p27=0;
		GPIO->GPIO_p28=0;
		GPIO->GPIO_p29=0;
		GPIO->GPIO_p30=0;
}

/***************************************************************
function GPIO_OUT_HIGH set gpio 0-30 to output high
function GPIO_OUT_HIGH_Pin set one of gpio 0-30 to output high

Note:first,set gpio 0-30 to GPIO mode
***************************************************************/
void GPIO_OUT_HIGH(void)
{
   GPIO->GPIO_OUT_SET=0x3fffff;
}
void GPIO_OUT_HIGH_Pin(uint32 Pin_number)
{
   GPIO->GPIO_OUT_SET=1<<Pin_number;
}

/***************************************************************
function GPIO_OUT_HIGH set gpio 0-30 to output low
function GPIO_OUT_HIGH_Pin set one of gpio 0-30 to output low

Note:first,set gpio 0-30 to GPIO mode
****************************************************************/
void GPIO_Clear(void)
{
   GPIO->GPIO_OUT_CLEAR=0x3fffff;
}
void GPIO_Clear_Pin(uint32 Pin_number)
{
   GPIO->GPIO_OUT_CLEAR=1<<Pin_number;
}
/***************************************************************
function GPIO_pullup pull up gpio 0-30

function GPIO_pullup_Pin pull up one of gpio 0-30

****************************************************************/
void GPIO_pullup(void)
{
  	GPIO->GPIO_p0=0x90;
		GPIO->GPIO_p1=0x90;
		GPIO->GPIO_p2=0x90;
		GPIO->GPIO_p3=0x90;
		GPIO->GPIO_p4=0x90;
		GPIO->GPIO_p5=0x90;
		GPIO->GPIO_p6=0x90;
		GPIO->GPIO_p7=0x90;
		GPIO->GPIO_p8=0x90;
		GPIO->GPIO_p9=0x90;
		GPIO->GPIO_p10=0x90;
		GPIO->GPIO_p11=0x90;
		GPIO->GPIO_p12=0x90;
		GPIO->GPIO_p13=0x90;
		GPIO->GPIO_p14=0x90;
		GPIO->GPIO_p15=0x90;
		GPIO->GPIO_p16=0x90;
		GPIO->GPIO_p17=0x90;
		GPIO->GPIO_p18=0x90;
		GPIO->GPIO_p19=0x90;
		GPIO->GPIO_p20=0x90;
		GPIO->GPIO_p21=0x90;
		GPIO->GPIO_p22=0x90;
		GPIO->GPIO_p23=0x90;
		GPIO->GPIO_p24=0x90;
		GPIO->GPIO_p25=0x90;
		GPIO->GPIO_p26=0x90;
		GPIO->GPIO_p27=0x90;
		GPIO->GPIO_p28=0x90;
		GPIO->GPIO_p29=0x90;
		GPIO->GPIO_p30=0x90;
}
void GPIO_pullup_Pin(uint32 Pin_number)
{
	  switch(Pin_number)
		{
			case 0  :  GPIO->GPIO_p0=0x90;break;
	  	case 1  :  GPIO->GPIO_p1=0x90;break;
		  case 2  :  GPIO->GPIO_p2=0x90;break;
	  	case 3  :  GPIO->GPIO_p3=0x90;break;
			case 4  :  GPIO->GPIO_p4=0x90;break;
	  	case 5  :  GPIO->GPIO_p5=0x90;break;
			case 6  :  GPIO->GPIO_p6=0x90;break;
	  	case 7  :  GPIO->GPIO_p7=0x90;break;
		  case 8  :  GPIO->GPIO_p8=0x90;break;
	  	case 9  :  GPIO->GPIO_p9=0x90;break;
			case 10 :  GPIO->GPIO_p10=0x90;break;
	  	case 11 :  GPIO->GPIO_p11=0x90;break;
			case 12 :  GPIO->GPIO_p12=0x90;break;
	  	case 13 :  GPIO->GPIO_p13=0x90;break;
		  case 14 :  GPIO->GPIO_p14=0x90;break;
	  	case 15 :  GPIO->GPIO_p15=0x90;break;
			case 16 :  GPIO->GPIO_p16=0x90;break;
	  	case 17 :  GPIO->GPIO_p17=0x90;break;
			case 18 :  GPIO->GPIO_p18=0x90;break;
	  	case 19 :  GPIO->GPIO_p19=0x90;break;
		  case 20 :  GPIO->GPIO_p20=0x90;break;
	  	case 21 :  GPIO->GPIO_p21=0x90;break;
			case 22 :  GPIO->GPIO_p22=0x90;break;
	  	case 23 :  GPIO->GPIO_p23=0x90;break;
			case 24 :  GPIO->GPIO_p24=0x90;break;
	  	case 25 :  GPIO->GPIO_p25=0x90;break;
		  case 26 :  GPIO->GPIO_p26=0x90;break;
	  	case 27 :  GPIO->GPIO_p27=0x90;break;
			case 28 :  GPIO->GPIO_p28=0x90;break;
	  	case 29 :  GPIO->GPIO_p29=0x90;break;
			case 30 :  GPIO->GPIO_p30=0x90;break;
		}      
}


/***************************************************************
function GPIO_pulldown pull down gpio 0-30
function GPIO_pulldown_Pin pull down one of gpio 0-30

****************************************************************/
void GPIO_pulldown(void)
{
  	GPIO->GPIO_p0=0x50;
		GPIO->GPIO_p1=0x50;
		GPIO->GPIO_p2=0x50;
		GPIO->GPIO_p3=0x50;
		GPIO->GPIO_p4=0x50;
		GPIO->GPIO_p5=0x50;
		GPIO->GPIO_p6=0x50;
		GPIO->GPIO_p7=0x50;
		GPIO->GPIO_p8=0x50;
		GPIO->GPIO_p9=0x50;
		GPIO->GPIO_p10=0x50;
		GPIO->GPIO_p11=0x50;
		GPIO->GPIO_p12=0x50;
		GPIO->GPIO_p13=0x50;
		GPIO->GPIO_p14=0x50;
		GPIO->GPIO_p15=0x50;
		GPIO->GPIO_p16=0x50;
		GPIO->GPIO_p17=0x50;
		GPIO->GPIO_p18=0x50;
		GPIO->GPIO_p19=0x50;
		GPIO->GPIO_p20=0x50;
		GPIO->GPIO_p21=0x50;
		GPIO->GPIO_p22=0x50;
		GPIO->GPIO_p23=0x50;
		GPIO->GPIO_p24=0x50;
		GPIO->GPIO_p25=0x50;
		GPIO->GPIO_p26=0x50;
		GPIO->GPIO_p27=0x50;
		GPIO->GPIO_p28=0x50;
		GPIO->GPIO_p29=0x50;
		GPIO->GPIO_p30=0x50;
}
void GPIO_pulldown_Pin(uint32 Pin_number)
{
	  switch(Pin_number)
		{
			case 0  :  GPIO->GPIO_p0=0x50;break;
	  	case 1  :  GPIO->GPIO_p1=0x50;break;
		  case 2  :  GPIO->GPIO_p2=0x50;break;
	  	case 3  :  GPIO->GPIO_p3=0x50;break;
			case 4  :  GPIO->GPIO_p4=0x50;break;
	  	case 5  :  GPIO->GPIO_p5=0x50;break;
			case 6  :  GPIO->GPIO_p6=0x50;break;
	  	case 7  :  GPIO->GPIO_p7=0x50;break;
		  case 8  :  GPIO->GPIO_p8=0x50;break;
	  	case 9  :  GPIO->GPIO_p9=0x50;break;
			case 10 :  GPIO->GPIO_p10=0x50;break;
	  	case 11 :  GPIO->GPIO_p11=0x50;break;
			case 12 :  GPIO->GPIO_p12=0x50;break;
	  	case 13 :  GPIO->GPIO_p13=0x50;break;
		  case 14 :  GPIO->GPIO_p14=0x50;break;
	  	case 15 :  GPIO->GPIO_p15=0x50;break;
			case 16 :  GPIO->GPIO_p16=0x50;break;
	  	case 17 :  GPIO->GPIO_p17=0x50;break;
			case 18 :  GPIO->GPIO_p18=0x50;break;
	  	case 19 :  GPIO->GPIO_p19=0x50;break;
		  case 20 :  GPIO->GPIO_p20=0x50;break;
	  	case 21 :  GPIO->GPIO_p21=0x50;break;
			case 22 :  GPIO->GPIO_p22=0x50;break;
	  	case 23 :  GPIO->GPIO_p23=0x50;break;
			case 24 :  GPIO->GPIO_p24=0x50;break;
	  	case 25 :  GPIO->GPIO_p25=0x50;break;
		  case 26 :  GPIO->GPIO_p26=0x50;break;
	  	case 27 :  GPIO->GPIO_p27=0x50;break;
			case 28 :  GPIO->GPIO_p28=0x50;break;
	  	case 29 :  GPIO->GPIO_p29=0x50;break;
			case 30 :  GPIO->GPIO_p30=0x50;break;
		}      
}
/***************************************************************
Set gpio 0-30 to GPIO mode ,and set input enable output disable

default :output and input disable,flaoting state

***************************************************************/
void GPIO_In(void)
{
  	GPIO->GPIO_p0=0x30;
		GPIO->GPIO_p1=0x30;
		GPIO->GPIO_p2=0x30;
		GPIO->GPIO_p3=0x30;
		GPIO->GPIO_p4=0x30;
		GPIO->GPIO_p5=0x30;
		GPIO->GPIO_p6=0x30;
		GPIO->GPIO_p7=0x30;
		GPIO->GPIO_p8=0x30;
		GPIO->GPIO_p9=0x30;
		GPIO->GPIO_p10=0x30;
		GPIO->GPIO_p11=0x30;
		GPIO->GPIO_p12=0x30;
		GPIO->GPIO_p13=0x30;
		GPIO->GPIO_p14=0x30;
		GPIO->GPIO_p15=0x30;
		GPIO->GPIO_p16=0x30;
		GPIO->GPIO_p17=0x30;
		GPIO->GPIO_p18=0x30;
		GPIO->GPIO_p19=0x30;
		GPIO->GPIO_p20=0x30;
		GPIO->GPIO_p21=0x30;
		GPIO->GPIO_p22=0x30;
		GPIO->GPIO_p23=0x30;
		GPIO->GPIO_p24=0x30;
		GPIO->GPIO_p25=0x30;
		GPIO->GPIO_p26=0x30;
		GPIO->GPIO_p27=0x30;
		GPIO->GPIO_p28=0x30;
		GPIO->GPIO_p29=0x30;
		GPIO->GPIO_p30=0x30;
}
/****************************************************************
config GPIO interrupt 
@ param Pin_number   :enable GPIO number
@ param trigger_mode :GPIO trigger mode 1:edge  triggered  
																				0:level triggered
@ parma trigger_pol  :GPIO trigger pol  1:posedge or high level
																				0:negedge or low  level
****************************************************************/
void GPIO_Intr_config(uint32 Pin_number,uint32 trigger_mode,uint32 trigger_pol)
{
		switch(Pin_number)
		{
			case 0  :  GPIO->GPIO_p0 =0x30; break;
	  	case 1  :  GPIO->GPIO_p1 =0x30; break;
		  case 2  :  GPIO->GPIO_p2 =0x30; break;
	  	case 3  :  GPIO->GPIO_p3 =0x30; break;
			case 4  :  GPIO->GPIO_p4 =0x30; break;
	  	case 5  :  GPIO->GPIO_p5 =0x30; break;
			case 6  :  GPIO->GPIO_p6 =0x30; break;
	  	case 7  :  GPIO->GPIO_p7 =0x30; break;
		  case 8  :  GPIO->GPIO_p8 =0x30; break;
	  	case 9  :  GPIO->GPIO_p9 =0x30; break;
			case 10 :  GPIO->GPIO_p10=0x30; break;
	  	case 11 :  GPIO->GPIO_p11=0x30; break;
			case 12 :  GPIO->GPIO_p12=0x30; break;
	  	case 13 :  GPIO->GPIO_p13=0x30; break;
		  case 14 :  GPIO->GPIO_p14=0x30; break;
	  	case 15 :  GPIO->GPIO_p15=0x30; break;
			case 16 :  GPIO->GPIO_p16=0x30; break;
	  	case 17 :  GPIO->GPIO_p17=0x30; break;
			case 18 :  GPIO->GPIO_p18=0x30; break;
	  	case 19 :  GPIO->GPIO_p19=0x30; break;
		  case 20 :  GPIO->GPIO_p20=0x30; break;
	  	case 21 :  GPIO->GPIO_p21=0x30; break;
			case 22 :  GPIO->GPIO_p22=0x30; break;
	  	case 23 :  GPIO->GPIO_p23=0x30; break;
			case 24 :  GPIO->GPIO_p24=0x30; break;
	  	case 25 :  GPIO->GPIO_p25=0x30; break;
		  case 26 :  GPIO->GPIO_p26=0x30; break;
	  	case 27 :  GPIO->GPIO_p27=0x30; break;
			case 28 :  GPIO->GPIO_p28=0x30; break;
	  	case 29 :  GPIO->GPIO_p29=0x30; break;
			case 30 :  GPIO->GPIO_p30=0x30; break;
		}
	GPIO->GPIO_int_en=1<<Pin_number;//GPIOX interrupt enable
	GPIO->GPIO_int_edge_nlevel=trigger_mode<<Pin_number;
	GPIO->GPIO_int_pol=trigger_pol<<Pin_number;
  GPIO->GPIO_wake_en=1<<0;//GPIOX wakeup enable 
	GPIO->GPIO_wake_pol=0;  //GPIOX wakeup mode
}






